package com.zhang.abstractFactory.example;

/**
 * @author ElloeStudy(Sifa Zhang)
 * @create 2022-03-01 18:57
 * To: 真常应物，真常得性，常清常静，常清静矣
 */
public abstract class AbstractHumanFactory implements HumanFactory{
    // 抽象类可以减少实现类的代码量

    // 引入enum的好处，createHuman(HumanEnum humanEnum)这个方法的参数必须是HumanEnum类型，使用getValue可以获得输入的值
    protected Human createHuman(HumanEnum humanEnum){
        Human human = null;
        // 保证传进来的是Enum的一个Element
        if (!humanEnum.getValue().equals("")){
                // 直接产生一个实例
                try {
                    human = (Human)Class.forName(humanEnum.getValue()).newInstance();
                } catch (InstantiationException e) {
                    //因为使用了enum，这个种异常情况不会产生了，除非你的enum有问题；
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        return human;
    }
}
